Despite advances in the area of formal verification, simulation-based techniques are still the cornerstone of the functional verification of processors and systems. These techniques involve running test-programs on environments that simulate the actual design. The design is verified by comparing the test-program results from such simulation environments with results expected from the design itself. A major concern in verification by simulation is to assess the coverage of the testing performed up to a given point. For this purpose, test coverage tools attempt to create, in a systematic fashion, a large and comprehensive list of tasks and to check which tasks have been covered in the testing phase.
One of the main goals of coverage tools is to provide the user with an informative presentation of coverage information. Specifically, information on large, cohesive sets of non-covered tasks with common properties is useful in guiding the user to define additional tests to cover these tasks efficiently. One method for this purpose involves discovering and reporting large non-covered spaces (referred to as “holes”) in a cross-product model of the test domain. This sort of method is described by Lachish et al., in “Hole Analysis for Functional Coverage Data,” 39th Design Automation Conference (DAC 2002, New Orleans, La.), which is incorporated herein by reference. Holes in the coverage space expose gaps in the testing, which the user may then “plug” with additional tests. The authors describe a method for aggregating holes that are quantitatively similar, and specifically holes separated by a Hamming distance of one.